package com.vviton.zyhj.common.common;

import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

import com.jeaw.sso.client.servlet.SSOServlet;
import com.jeaw.sso.client.validation.Assertion;

/**
 * 公共模块调用读取用户
 *
 * @Desc
 * @Author wanrj
 * @Date 2015年9月11日 上午10:30:57
 */
public abstract class GlobalConstants {

    /** 日志记录 */
    private static Logger logger = Logger.getLogger(GlobalConstants.class);
    
    /** 新增 */
    public static final String DELFLAG_ADD = "A";

    /** 更新 */
    public static final String DELFLAG_UPDATE = "U";

    /** 删除 */
    public static final String DELFLAG_DELETE = "D";

    /** 第三方课堂会话对象Key */
    public static final String SESSION_KTXX = "SESSION_KTXX";

    /** 消费者会员会话对象Key */
    public static final String SESSION_HYXX = "SESSION_HYXX";

    /** 平台运维人员会话对象Key */
    public static final String SESSION_YWRY = "SESSION_YWRY";

    /** 存放用户信息的cookie key **/
    public static final String SESSION_KEY = "SESSION";

    /** session 会话心跳返回成功代码 */
    public static final String SESSION_ATTACHED_CODE = "5000";

    /** 第三方 用户会话丢失编码 */
    public static final String SESSION_MISS_CODE_EP = "4001";

    /** 平台 用户会话丢失编码 */
    public static final String SESSION_MISS_CODE_AM = "4002";

    /** 消费者 用户会话丢失编码 */
    public static final String SESSION_MISS_CODE_CS = "4003";

    /** 移动端 用户会话丢失编码 */
    public static final String SESSION_MISS_CODE_MB = "4004";

    /** 存放被排除过滤的请求地址 */
    public static Set<Object> EXCLUDE_SESSION_URL = new HashSet<Object>();

    /** 常量 **/
    private static final int NUMBER_A = 6;

    /** 常量 **/
    private static final int NUMBER_B = 11;
    /** 常量 **/
    private static final int NUMBER_C = 31;
    /** 常量 **/
    private static final int NUMBER_D = 23;
    /** 常量 **/
    private static final int NUMBER_E = 59;
    /** 常量 **/
    private static final int NUMBER_F = 5;
    /** 常量 **/
    private static final int NUMBER_G = 30;

    /** 动态加载排除过滤请求地址集合 */
    static {
        InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("conf/excludeSessionFilter.properties");
        Properties prop = new Properties();
        try {
            prop.load(input);
            EXCLUDE_SESSION_URL = prop.keySet();
            input.close();
        } catch (IOException e) {
            logger.error("Loading exclude session filter url failed!!");
            e.printStackTrace();
        }
    }
    /** 动态加载媒体类型配置文件集合 */
    public static Properties FILE_TYPE_DISTINGUISH = new Properties();
    /** 文件类型结合 */
    public static Set<Object> FILE_KEY_SET = new HashSet<Object>();
    static {
        InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("conf/fileTypeDistinguish.properties");
        try {
            FILE_TYPE_DISTINGUISH.load(input);
            FILE_KEY_SET = FILE_TYPE_DISTINGUISH.keySet();
            input.close();
        } catch (IOException e) {
            logger.error("Loading file type property failed!!");
            e.printStackTrace();
        }

    }

    /**
     * @Desc 获取当前用户登录的账号
     * @Author weiming.chen
     * @Date 2016年1月19日 下午1:37:10
     * @param req 请求request
     * @return 用户账号
     */
    public static String getSSOZH(HttpServletRequest req) {
        String zh = "";
        Assertion validAssertion = (Assertion) req.getSession().getAttribute(SSOServlet.CONST_CAS_ASSERTION);
        if (validAssertion != null) {
            Map<String, Object> userMap = validAssertion.getPrincipal().getAttributes();
            if (userMap != null) {
                Object loginOjb = userMap.get("loginid");
                zh = loginOjb == null ? "" : loginOjb.toString();
            }
        }
        return zh;
    }

    /**
     * getJfyxqz,获取积分过期日期. <br/>
     * Author: 秦士亚 <br/>
     * Create Date: 2015年10月27日 <br/>
     * ===============================================================<br/>
     * Modifier: huangqq <br/>
     * Modify Date: 2016年2月3日 <br/>
     * Modify Description: <br/>
     * ===============================================================<br/>
     *
     * @param date 当前日期
     * @return Date
     * @since JDK 1.7
     */
    public static Date getJfyxqz(Date date) {

        // 获取当前日期
        Calendar currentCal = Calendar.getInstance();
        currentCal.setTime(date);

        // 获取判断用日期
        Calendar month71 = Calendar.getInstance();
        month71.set(currentCal.get(Calendar.YEAR), NUMBER_A, 1, 0, 0, 0);

        long currentL = currentCal.getTimeInMillis();
        long month71L = month71.getTimeInMillis();
        int currentYear = currentCal.get(Calendar.YEAR);
        Calendar overdateCal = Calendar.getInstance();

        // 大于等于7月1号 第二年12月31号为过期日期
        // 小于7月1号 第二年6月30号为过期日期
        if (currentL >= month71L) {
            overdateCal.set(currentYear + 1, NUMBER_B, NUMBER_C, NUMBER_D, NUMBER_E, NUMBER_E);
        } else {
            overdateCal.set(currentYear + 1, NUMBER_F, NUMBER_G, NUMBER_D, NUMBER_E, NUMBER_E);
        }
        return new Date(overdateCal.getTimeInMillis());
    }
}
